#include "Point.h"

/// Operações do ponto ///
Vector Point::paraVector() const
{
    Vector aux(this->get_dimensao());
    for(size_t i=0 ; i<(this->get_dimensao()) ; i++)
        aux(i) = (*this)(i);
    return(aux);
}

Point Point::operator+(const Point& p) const
{
    // Checar se as dimensões do pontos são iguais:
    if(this->get_dimensao() == p.get_dimensao())
    {
        Point aux(this->get_dimensao());
        for(size_t i=0 ; i<(this->get_dimensao()) ; i++)
            aux(i) = (*this)(i) + p(i);
        return(aux);
    }
    else
    {
        cout<<get_nome()<<"operator+: o pontos tem dimensoes diferentes ("<<this->get_dimensao()<<" e "<<p.get_dimensao()<<")."<<endl;
        return(Point());
    }
}

Vector Point::operator-(const Point& p) const
{
    // Checar se as dimensões dos dois pontos são iguais:
    if(this->get_dimensao() == p.get_dimensao())
    {
        Vector aux(this->get_dimensao());
        for(size_t i=0 ; i<(this->get_dimensao()) ; i++)
            aux(i) = (*this)(i) - p(i);
        return(aux);
    }
    else
    {
        cout<<get_nome()<<"operator-: os pontos tem dimensoes diferentes ("<<this->get_dimensao()<<" e "<<p.get_dimensao()<<")."<<endl;
        return(Vector());
    }
}

Point Point::operator+(const Vector& v) const
{
    // Checar se as dimensões do ponto e do vetor são iguais:
    if(this->get_dimensao() == v.get_dimensao())
    {
        Point aux(this->get_dimensao());
        for(size_t i=0 ; i<(this->get_dimensao()) ; i++)
            aux(i) = (*this)(i) + v(i);
        return(aux);
    }
    else
    {
        cout<<get_nome()<<"operator+: o ponto e o vetor tem dimensoes diferentes ("<<this->get_dimensao()<<" e "<<v.get_dimensao()<<")."<<endl;
        return(Point());
    }
}
